#ifndef T12_INC_PID_H_
#define T12_INC_PID_H_

/**
 * @brief PID参数
 */
typedef struct pid_struct
{
    double _dt;  // 采样周期为dt
    double _max; // PID计算后的最大值
    double _min; // PID计算后的最小值

    double _P;
    double _I;
    double _D;
    double _pre_error;
    double _integral;

    double setpoint; // 设定值
    double pv;       // 上一次的计算值
} PID_STRUCTURE;

/**
 * @brief 使用内部储存的值计算
 * @return double
 */
double pid_calculate(PID_STRUCTURE *_pid);

/**
 * @brief 设置下一次使用内部储存计算的参数
 * @param  setpoint         desc
 * @param  pv               desc
 */
void setNextCalculateArguments(PID_STRUCTURE _pid, double setpoint, double pv);

#endif // T12_INC_PID_H_
